EC2インスタンスを別のAWSアカウントに移行する方法
AWS のサイトで、EC2 を別の AWS アカウントに転送(移行)する方法を説明している QA を見つけたので試してみました。
移行シナリオ
移行シナリオとしては、移行元アカウント(Account-A)に存在する EC2 を移行先アカウント(Account-B)に移行してみます。
本構成では Route 53 で DNS ドメイン名を解決した後に EC2 インスタンスにアクセスする構成としています。
移行前構成図
移行元アカウントの EC2 設定
移行元アカウントの EC2(Amazon Linux 2)の構成は下図の通りです。さらに、Elastic IP を割り当てています。
注意点:本検証は EBS ボリュームを暗号化していないことが前提となります
OS 設定としては、Apache をインストールしておき、Web ページには「Account-Aで作成したEC2インスタンス」と表示させます。
$ sudo yum -y install httpd
<html> <head> <title>Account-Aで作成したEC2インスタンス</title> </head> <body> Account-Aで作成したEC2インスタンス </body> </html>
Web サーバを起動します。
$ sudo systemctl start httpd
Web サーバの自動起動設定を行います。
$ sudo systemctl is-enabled httpd
Route 53 の設定
Route 53 には A レコードを登録しておきます。値には EC2 インスタンスに割り当てた Elastic IP アドレスを入力します。
疎通確認
Route 53 で登録した DNS ドメイン名でアクセスできることを確認します。
EC2 インスタンスのアカウント移行
次の STEP に沿って、実際に EC2 のアカウント移行を行ってみます。
STEP 1 : 移行元アカウントで AMI を作成します
STEP 2 : STEP 1 で作成した移行元アカウントの AMI を移行先アカウントに共有します
STEP 3 : 移行元アカウントから共有された AMI を用いて移行先アカウントで EC2 インスタンスを起動します
STEP 4 : 移行先アカウントで AMI を作成します
STEP 5 : DNS の応答内容を移行先アカウントの EC2 インスタンスに切り替えます
STEP 6 : 移行元アカウントで AMI の共有を解除します
STEP 1
概要
移行元アカウントで AMI を作成します。
実施
移行元アカウントで EC2 を停止し、AMI を作成します。
注意点:AMI には静的な IP アドレスを設定していないこと(接続に問題が発生する可能性あり)
AMI には必要な EBS ボリュームをすべて含めるようにします。
STEP 2
概要
STEP 1 で作成した移行元アカウントの AMI を移行先アカウントに共有します。
実施
移行元アカウントにおいて、AMI の「アクション」→「イメージパーミッションの変更」を選択した後に、「AWS アカウント番号」に移行先アカウント(Account-B)のアカウント ID を入力して「保存」します。
移行先アカウントから共有された AMI を確認します。確認の際は「プライベートイメージ」を選択する必要があります。「所有者」には移行元アカウント(Account-A)のアカウント ID が表示されます。
STEP 3
概要
移行元アカウントから共有された AMI を用いて移行先アカウントで EC2 インスタンスを起動します。
実施
移行元アカウントから共有されている AMI を選択し、「アクション」→「起動」を実行して EC2 インスタンスを作成します。
今回のシナリオでは、EC2 のインスタンスタイプとストレージサイズは移行元 EC2 インスタンスと合わせています。
移行元アカウント同様に、作成した EC2 インスタンスには Elastic IP アドレスを割り当てます。
キーペアも移行する場合は別のブログを参照ください。今回のシナリオではキーペアは新しく作成しています。
疎通確認を行い、「Account-A で作成した EC2 インスタンス」と表示されることを確認します。まだ DNS の切り替えを行っていないので、Elastic IP アドレスでアクセスする必要があります。
STEP 4
概要
移行先アカウントで AMI を作成します。
実施
現状では移行元アカウントの AMI を利用しており、移行先アカウントには AMI が無い状況なので、移行先アカウントにおいても EC2 インスタンスを停止して AMI を作成します。
作成した AMI を確認します。「プライベートイメージ」で確認した場合に、移行元アカウントから共有されている AMI と移行先アカウントで作成した AMI の両方が表示されますが、移行先アカウントで作成した AMI 名「test-ami-b」の「所有者」を確認すると、移行先アカウントのアカウント ID が表示されていることが確認できます。
STEP 5
概要
DNS の応答内容を移行先アカウントの EC2 インスタンスに切り替えます。
実施
Route 53 において、DNS ドメインを解決する A レコードの値を移行先アカウントの EC2 インスタンスに割り当てた Elastic IP アドレスに更新します。
疎通確認を行います。
Web ページが表示されることを確認できました。
疎通確認の際に、DNS のキャッシュが残っている場合は、移行元アカウントの EC2 インスタンスを参照している可能性がありますので、キャッシュの TTL には注意する必要があります。dig コマンド等で DNS の応答内容を確認するようにしましょう。
$ dig test-instance.example.com +short xxx.xxx.xxx.xxx # 移行先アカウントのEC2インスタンスに割り当てたElastic IPアドレスが表示されていることを確認
STEP 6
概要
移行元アカウントで AMI の共有を解除します。
実施
移行元アカウントにおいて、AMI の「アクション」→「イメージパーミッションの変更」を選択した後に、「AWS アカウント番号」に表示されている移行先アカウント(Account-B)のアカウント ID を削除します。
移行先アカウントから移行元アカウントの AMI が参照できないことを確認します。移行先アカウントのAMIの「プライベートイメージ」において、移行先アカウントで作成した AMI である「test-ami-b」しか存在しておらず、共有が解除されていることが確認できました。
以上で移行作業は完了となります。
最後に必要に応じて移行元アカウントの環境をクリーンアップします。
まとめ
EC2 インスタンスを別のアカウントに移行する一連の流れをDNSの切り替えも含めて試してみました。どなたかのご参考になれば幸いです。